clear all;clc
%% IoU指标测量
load pix_location
load Point_Set
load Scale
load SID
load p_xid p_xid
load p_yid p_yid
Stego=rgb2ycbcr(imread('./distance_exp/image6/Cloc_1_dc.jpg'));
Cstego=imread('./distance_exp/image6/Cloc_1_dc.jpg');
Y_Stego_A=Stego(:,:,1);
Y_Stego=imresize(Y_Stego_A,Scale(SID(p_xid)));
Cstego=imresize(Cstego,Scale(SID(p_xid)));
imshow(Y_Stego);

%% 手工四点确定IoU区域并且计算面积--面积可以用特定区域内像素的个数代替（蒙特卡洛思想），特定区域可以用线性规划思想
%% 手工选择四点
dot=ginput(4);       %取四个点，依次是左上，右上，左下，右下
imshow(Cstego);
hold on
dot(:,[1,2])= dot(:,[2,1]); % 变换x y坐标，x=行 y=列  | 也就是使得dot矩阵第一列表示行，第二列表示列
% 原图四个基准点的坐标
row_1 = [dot(1,1),dot(2,1),dot(4,1),dot(3,1),dot(1,1)];%行,y
col_1 = [dot(1,2),dot(2,2),dot(4,2),dot(3,2),dot(1,2)];%列,x
plot(col_1,row_1,'Color',[1 0 0],'Linewidth', 2, 'MarkerSize', 8),hold on;
%% 计算四点面积 polyarea
% plot(col,row);
% axis equal
S1=polyarea(col_1,row_1);
%% Point_Set 四点确定的IoU区域
% 逆变换找对应尺度下的坐标
row=pix_location(:,1);
col=pix_location(:,2);
row_2=[row(1),row(3),row(4),row(2),row(1)];
col_2=[col(1),col(3),col(4),col(2),col(1)];plot(col_2,row_2,'Color',[0 1 0],'Linewidth', 2, 'MarkerSize',8),hold off;
S2=polyarea(col_2,row_2);
legend('Groud Truth','Detection Result','Interpreter','Latex');   %右上角标注
% plot(col_2,row_2);
% axis equal
% 尺度变换(按一定比例扩大这个区域)
%计算四点面积
%% 性能计算 -- polyshape/polybool 
A = polyshape(col_1,row_1); 
Proportion=area(A)/(size(Y_Stego,1)*size(Y_Stego,2));
disp(['Area Proportion : ',num2str(Proportion)]);
B = polyshape(col_2,row_2); 
axis([1 size(Y_Stego,1) 1 size(Y_Stego,2)]); % 设置坐标轴在指定的区间
% subplot(311)
% plot(A);%set(handles,'xtick',0:100:2500) % handles可以指定具体坐标轴的句柄
% hold on
% plot(B);%set(handles,'ytick',0:100:2500) % handles可以指定具体坐标轴的句柄
% title('Area distribution');
% hold off
%Intersect and Union
% subplot(312),
polyout_U = union(A,B);
% plot(polyout_U),title('Union');
U_S = area(polyout_U);
% subplot(313),
polyout_I = intersect(A,B);
% plot(polyout_I),title('Intersect');
I_S = area(polyout_I);
%看一看
IoU=I_S/U_S;
disp(['IoU Performance : ',num2str(IoU)]);